package com.dw.dao;

import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;


/**
 * @Description BaseDao工具类
 * @Author dw
 * @Date 2019/12/2 14:42
 * @Version 1.0
 **/
public interface BaseDao {

    /**
     * 插入表操作：数据库列名集合和属性值集合必须一一对应
     *
     * @param tableName 操作的表名称
     * @param columnList 数据库列名集合
     * @param propertyList 属性值集合
     * @return java.lang.Integer
     */
    Integer insert(@Param("tableName") String tableName, @Param("columnList") List<String> columnList, @Param("propertyList") List<String> propertyList);

    /**
     * 删除记录操作
     *
     * @param tableName 操作的表名称
     * @param idMap id 表主键
     * @return java.lang.Integer
     */
    Integer delete(@Param("tableName") String tableName, @Param("idMap") Map<String, String> idMap);

    /**
     * 修改表记录
     *
     * @param tableName 操作的表名称
     * @param columnList 参数集合，列名
     * @param propertyList 参数集合，实体属性
     * @param idMap id
     * @return java.lang.Integer
     */
    Integer update(@Param("tableName") String tableName, @Param("columnList") List<String> columnList, @Param("propertyList") List<String> propertyList, @Param("idMap") Map<String, String> idMap);

    /**
     * 查询单条记录
     *
     * @param tableName 操作的表名称
     * @param paramMap 条件
     * @return java.util.Map<java.lang.Object , java.lang.Object>
     */
    Map<Object,Object> findByOne(@Param("tableName") String tableName, @Param("paramMap") Map<String, String> paramMap);

    /**
     * 查询所有记录
     *
     * @param tableName 操作的表名称
     * @param paramMap 条件集合
     * @return java.util.List<java.util.Map < java.lang.Object , java.lang.Object>>
     */
    List<Map<Object,Object>> findAll(@Param("tableName") String tableName, @Param("paramMap") Map<String, String> paramMap);

    /**
     * 分页查询
     *
     * @param tableName  操作的表名称
     * @param limit
     * @param offset
     * @return java.util.List<java.util.Map < java.lang.Object , java.lang.Object>>
     */
    List<Map<Object,Object>> getPageList(@Param("tableName") String tableName, @Param("offset") Integer offset, @Param("limit") Integer limit, @Param("paramMap") Map<String, String> paramMap);

    /**
     * 查询总记录条数
     *
     * @param tableName
     * @return java.lang.Integer
     */
    Integer getTotalCount(@Param("tableName") String tableName);



}
